﻿using System;
using System.Collections.Generic;
using System.Text;

namespace Sinacor.Servico.Bovespa.Corretagem.Service.ServiceImplementation.Translator.DataContractToBusinessEntity
{
    /// <summary>
    /// Formador de Mercado
    /// </summary>
    public class FormadorMercado
    {
        /// <summary>
        /// Metodo ToFiltroFormadorMercado
        /// </summary>
        public BusinessEntity.Parameter.FiltroFormadorMercado ToFiltroFormadorMercado(DataContract.Request.FiltroFormadorMercadoRequest request)
        {
            BusinessEntity.Parameter.FiltroFormadorMercado result = null;
            if (request == null)
                return null;
            else
            {
                result = new Sinacor.Servico.Bovespa.Corretagem.BusinessEntity.Parameter.FiltroFormadorMercado();
                result.ApelidoCliente = request.ApelidoCliente;
                result.Ativo = request.Ativo;
                result.CodigoCliente = request.CodigoCliente;
                result.DataFinal = request.DataFinal;
                result.DataInicial = request.DataInicial;
                result.PercentualDesconto = request.PercentualDesconto;
                result.Isin = request.Isin;
                if (request.TipoMercado.HasValue)
                {
                    switch (request.TipoMercado.Value)
                    {
                        case Sinacor.Servico.Bovespa.Corretagem.Service.DataContract.Enum.TipoMercado.Vista:
                            result.TipoMercado = BusinessEntity.Enum.TipoMercado.Vista; break;
                        case Sinacor.Servico.Bovespa.Corretagem.Service.DataContract.Enum.TipoMercado.OpcaoCompra:
                            result.TipoMercado = BusinessEntity.Enum.TipoMercado.OpcaoCompra; break;
                        case Sinacor.Servico.Bovespa.Corretagem.Service.DataContract.Enum.TipoMercado.OpcaoVenda:
                            result.TipoMercado = BusinessEntity.Enum.TipoMercado.OpcaoVenda; break;
                        case Sinacor.Servico.Bovespa.Corretagem.Service.DataContract.Enum.TipoMercado.ExercicioOpcaoCompra:
                            result.TipoMercado = BusinessEntity.Enum.TipoMercado.ExercicioOpcaoCompra; break;
                        case Sinacor.Servico.Bovespa.Corretagem.Service.DataContract.Enum.TipoMercado.ExercicioOpcaoVenda:
                            result.TipoMercado = BusinessEntity.Enum.TipoMercado.ExercicioOpcaoVenda; break;
                        case Sinacor.Servico.Bovespa.Corretagem.Service.DataContract.Enum.TipoMercado.Fracionario:
                            result.TipoMercado = BusinessEntity.Enum.TipoMercado.Fracionario; break;
                        case Sinacor.Servico.Bovespa.Corretagem.Service.DataContract.Enum.TipoMercado.Estruturado:
                            result.TipoMercado = BusinessEntity.Enum.TipoMercado.Estruturado; break;
                        case Sinacor.Servico.Bovespa.Corretagem.Service.DataContract.Enum.TipoMercado.Leilao:
                            result.TipoMercado = BusinessEntity.Enum.TipoMercado.Leilao; break;
                        case Sinacor.Servico.Bovespa.Corretagem.Service.DataContract.Enum.TipoMercado.Termo:
                            result.TipoMercado = BusinessEntity.Enum.TipoMercado.Termo; break;
                        case Sinacor.Servico.Bovespa.Corretagem.Service.DataContract.Enum.TipoMercado.LeilaoNaoCotados:
                            result.TipoMercado = BusinessEntity.Enum.TipoMercado.LeilaoNaoCotados; break;
                        case Sinacor.Servico.Bovespa.Corretagem.Service.DataContract.Enum.TipoMercado.Futuro:
                            result.TipoMercado = BusinessEntity.Enum.TipoMercado.Futuro; break;
                        case Sinacor.Servico.Bovespa.Corretagem.Service.DataContract.Enum.TipoMercado.VencimentoFuturo:
                            result.TipoMercado = BusinessEntity.Enum.TipoMercado.VencimentoFuturo; break;
                        case Sinacor.Servico.Bovespa.Corretagem.Service.DataContract.Enum.TipoMercado.BOX:
                            result.TipoMercado = BusinessEntity.Enum.TipoMercado.BOX; break;
                        case Sinacor.Servico.Bovespa.Corretagem.Service.DataContract.Enum.TipoMercado.OpcaoVendaCompra:
                            result.TipoMercado = BusinessEntity.Enum.TipoMercado.OpcaoVendaCompra; break;
                        case Sinacor.Servico.Bovespa.Corretagem.Service.DataContract.Enum.TipoMercado.IntegralizacaoResgateCotas:
                            result.TipoMercado = BusinessEntity.Enum.TipoMercado.IntegralizacaoResgateCotas; break;
                        case Sinacor.Servico.Bovespa.Corretagem.Service.DataContract.Enum.TipoMercado.CotasETF:
                            result.TipoMercado = BusinessEntity.Enum.TipoMercado.CotasETF; break;
                        default:
                            break;
                    }
                }
            }
            return result;
        }

        /// <summary>
        /// Metodo ToFiltroFormadorMercado
        /// </summary>
        public List<BusinessEntity.Parameter.FiltroFormadorMercado> ToFiltroFormadorMercado(List<DataContract.Request.FiltroFormadorMercadoRequest> requestList)
        {
            List<BusinessEntity.Parameter.FiltroFormadorMercado> resultList = null;
            if (requestList != null)
            {
                resultList = new List<Sinacor.Servico.Bovespa.Corretagem.BusinessEntity.Parameter.FiltroFormadorMercado>();
                foreach (DataContract.Request.FiltroFormadorMercadoRequest entity in requestList)
                {
                    resultList.Add(ToFiltroFormadorMercado(entity));
                }
            }
            return resultList;
        }

        /// <summary>
        /// Metodo ToFormadorMercado
        /// </summary>
        public BusinessEntity.FormadorMercado ToFormadorMercado(DataContract.Request.FormadorMercadoRequest request)
        {

            BusinessEntity.FormadorMercado result = null;
            if (request == null)
                return null;
            else
            {
                result = new Sinacor.Servico.Bovespa.Corretagem.BusinessEntity.FormadorMercado();
                result.ApelidoCliente = request.ApelidoCliente;
                result.Ativo = request.Ativo;
                result.CodigoCliente = request.CodigoCliente;
                result.DataFinal = request.DataFinal;
                result.DataInicial = request.DataInicial;
                result.PercentualDesconto = request.PercentualDesconto;
                result.Isin = request.Isin;

                switch (request.TipoMercado)
                {
                    case Sinacor.Servico.Bovespa.Corretagem.Service.DataContract.Enum.TipoMercado.Vista:
                        result.TipoMercado = BusinessEntity.Enum.TipoMercado.Vista; break;
                    case Sinacor.Servico.Bovespa.Corretagem.Service.DataContract.Enum.TipoMercado.OpcaoCompra:
                        result.TipoMercado = BusinessEntity.Enum.TipoMercado.OpcaoCompra; break;
                    case Sinacor.Servico.Bovespa.Corretagem.Service.DataContract.Enum.TipoMercado.OpcaoVenda:
                        result.TipoMercado = BusinessEntity.Enum.TipoMercado.OpcaoVenda; break;
                    case Sinacor.Servico.Bovespa.Corretagem.Service.DataContract.Enum.TipoMercado.ExercicioOpcaoCompra:
                        result.TipoMercado = BusinessEntity.Enum.TipoMercado.ExercicioOpcaoCompra; break;
                    case Sinacor.Servico.Bovespa.Corretagem.Service.DataContract.Enum.TipoMercado.ExercicioOpcaoVenda:
                        result.TipoMercado = BusinessEntity.Enum.TipoMercado.ExercicioOpcaoVenda; break;
                    case Sinacor.Servico.Bovespa.Corretagem.Service.DataContract.Enum.TipoMercado.Fracionario:
                        result.TipoMercado = BusinessEntity.Enum.TipoMercado.Fracionario; break;
                    case Sinacor.Servico.Bovespa.Corretagem.Service.DataContract.Enum.TipoMercado.Estruturado:
                        result.TipoMercado = BusinessEntity.Enum.TipoMercado.Estruturado; break;
                    case Sinacor.Servico.Bovespa.Corretagem.Service.DataContract.Enum.TipoMercado.Leilao:
                        result.TipoMercado = BusinessEntity.Enum.TipoMercado.Leilao; break;
                    case Sinacor.Servico.Bovespa.Corretagem.Service.DataContract.Enum.TipoMercado.Termo:
                        result.TipoMercado = BusinessEntity.Enum.TipoMercado.Termo; break;
                    case Sinacor.Servico.Bovespa.Corretagem.Service.DataContract.Enum.TipoMercado.LeilaoNaoCotados:
                        result.TipoMercado = BusinessEntity.Enum.TipoMercado.LeilaoNaoCotados; break;
                    case Sinacor.Servico.Bovespa.Corretagem.Service.DataContract.Enum.TipoMercado.Futuro:
                        result.TipoMercado = BusinessEntity.Enum.TipoMercado.Futuro; break;
                    case Sinacor.Servico.Bovespa.Corretagem.Service.DataContract.Enum.TipoMercado.VencimentoFuturo:
                        result.TipoMercado = BusinessEntity.Enum.TipoMercado.VencimentoFuturo; break;
                    case Sinacor.Servico.Bovespa.Corretagem.Service.DataContract.Enum.TipoMercado.BOX:
                        result.TipoMercado = BusinessEntity.Enum.TipoMercado.BOX; break;
                    case Sinacor.Servico.Bovespa.Corretagem.Service.DataContract.Enum.TipoMercado.OpcaoVendaCompra:
                        result.TipoMercado = BusinessEntity.Enum.TipoMercado.OpcaoVendaCompra; break;
                    case Sinacor.Servico.Bovespa.Corretagem.Service.DataContract.Enum.TipoMercado.IntegralizacaoResgateCotas:
                        result.TipoMercado = BusinessEntity.Enum.TipoMercado.IntegralizacaoResgateCotas; break;
                    case Sinacor.Servico.Bovespa.Corretagem.Service.DataContract.Enum.TipoMercado.CotasETF:
                        result.TipoMercado = BusinessEntity.Enum.TipoMercado.CotasETF; break;
                    default:
                        break;
                }
            }

            return result;
        }

        /// <summary>
        /// Metodo ToFormadorMercado
        /// </summary>
        public List<BusinessEntity.FormadorMercado> ToFormadorMercado(List<DataContract.Request.FormadorMercadoRequest> requestList)
        {
            List<BusinessEntity.FormadorMercado> resultList = null;
            if (requestList != null)
            {
                resultList = new List<Sinacor.Servico.Bovespa.Corretagem.BusinessEntity.FormadorMercado>();
                foreach (DataContract.Request.FormadorMercadoRequest entity in requestList)
                {
                    resultList.Add(ToFormadorMercado(entity));
                }
            }
            return resultList;
        }
               
    }
}
